package com.shujia.day17;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class Demo07JavaInnerLambdaFunction {
    public static void main(String[] args) {
        /*
            TODO Java内置的 Lambda函数
                public interface Predicate<T> {
                    boolean test(T t);
                }
         */
//        Predicate<Integer> predicate = (Integer integer) -> {
//            return integer > 100;
//        };

        Predicate<Integer> predicate = integer -> integer > 100 ? true : false;
        System.out.println(predicate.test(10));

        /*
            TODO
                public interface Function<T, R> {
                    R apply(T t);
                }
                定义一个函数，可以传入参数，返回一个学生对象

                函数型接口? => 要求传入一个学生对象，调用学生对象的方法，将结果返回
         */
        Function<String,Student> function = name -> new Student(name,18);
        Student student = function.apply("张三");
        System.out.println(student);


        Function<Student,String> function2 = stu ->  stu.getName();
        System.out.println(function2.apply(student));


        /*
            供给型接口
            public interface Supplier<T> {
                T get();
            }
            相当于是 一个工厂类中的方法
         */

        Supplier<Student> supplier = () -> new Student("姓名",18);
        System.out.println(supplier.get());
        System.out.println(supplier.get());


        /*
            消费型接口
            public interface Consumer<T> {
                void accept(T t);
            }
         */
        Consumer<Student> consumer = stu2 -> {
            System.out.println(stu2.name+"今年:"+stu2.age);
        };
        consumer.accept(new Student("李四",20));



    }
}
